import java.util.Stack;

public class Test01 {
    public int calculate(String s) {
        Stack<Integer> stack  = new Stack();
        char sign = '+';
        s = s.replaceAll(" ", ""); // 去除空格
        int n = s.length();

        int num = 0;
        for(int i = 0 ; i  < n; i++){
            //提取数字
            if(Character.isDigit(s.charAt(i))){
                num = num * 10 + s.charAt(i) - '0';
            }

            // 如果遇到运算符或到达字符串末尾，就处理当前数字
            if (!Character.isDigit(s.charAt(i)) || i == n - 1) {
                if (sign == '+') {
                    stack.push(num);  // 如果是加法，直接将当前数字压入栈
                } else if (sign == '-') {
                    stack.push(-num);  // 如果是减法，将当前数字取负压入栈
                } else if (sign == '*') {
                    stack.push(stack.pop() * num);  // 如果是乘法，弹出栈顶元素与当前数字相乘，再压入栈
                } else if (sign == '/') {
                    stack.push(stack.pop() / num);  // 如果是除法，弹出栈顶元素并除以当前数字，再压入栈
                }

                sign = s.charAt(i);  // 更新运算符
                num = 0;   // 重置当前数字
            }

        }
        // 最后将栈中的所有数相加
        int result = 0;
        while (!stack.isEmpty()) {
            result += stack.pop();
        }

        return result;
    }
}
